/*
 * GoKnightTest.cpp
 *
 *  Created on: 21/09/2011
 *      Author: enikolas
 */

#include "GoKnightTest.h"

GoKnightTest::GoKnightTest() {
	meusTestesGenericos();
	testaCavaloMask();
}

void GoKnightTest::meusTestesGenericos() {
	tipoTabuleiro tabuleiro = 0;

	tabuleiro = tb.setBit(tabuleiro, A2);
	tabuleiro = tb.setBit(tabuleiro, B2);
	tabuleiro = tb.setBit(tabuleiro, C2);
	tabuleiro = tb.setBit(tabuleiro, D2);
	tabuleiro = tb.setBit(tabuleiro, E2);
	tabuleiro = tb.setBit(tabuleiro, F2);
	tabuleiro = tb.setBit(tabuleiro, H2);
	tabuleiro = tb.setBit(tabuleiro, G2);

	assert(tb.isBitSet(tabuleiro, A2));
	assert(tb.isBitSet(tabuleiro, B2));
	assert(tb.isBitSet(tabuleiro, C2));
	assert(tb.isBitSet(tabuleiro, D2));
	assert(tb.isBitSet(tabuleiro, E2));
	assert(tb.isBitSet(tabuleiro, F2));
	assert(tb.isBitSet(tabuleiro, H2));
	assert(tb.isBitSet(tabuleiro, G2));

	assert(tb.isBitClear(tabuleiro, A1));
	assert(!tb.isBitClear(tabuleiro, B2));
	assert(tb.isBitClear(tabuleiro, C3));
	assert(tb.isBitClear(tabuleiro, D4));
	assert(tb.isBitClear(tabuleiro, E5));
	assert(tb.isBitClear(tabuleiro, F6));
	assert(tb.isBitClear(tabuleiro, H7));
	assert(tb.isBitClear(tabuleiro, G8));
}

void GoKnightTest::testaCavaloMask() {
	tipoTabuleiro esperadoA1 = 0;
	esperadoA1 = tb.setBit(esperadoA1,B3);
	esperadoA1 = tb.setBit(esperadoA1,C2);
	assert(tb.getMaskAttack(CAVALO,A1) == esperadoA1);

	tipoTabuleiro esperadoA8 = 0;
	esperadoA8 = tb.setBit(esperadoA8,B6);
	esperadoA8 = tb.setBit(esperadoA8,C7);
	assert(tb.getMaskAttack(CAVALO,A8) == esperadoA8);

	tipoTabuleiro esperadoH1 = 0;
	esperadoH1 = tb.setBit(esperadoH1,G3);
	esperadoH1 = tb.setBit(esperadoH1,F2);
	assert(tb.getMaskAttack(CAVALO,H1) == esperadoH1);

	tipoTabuleiro esperadoH8 = 0;
	esperadoH8 = tb.setBit(esperadoH8,G6);
	esperadoH8 = tb.setBit(esperadoH8,F7);
	assert(tb.getMaskAttack(CAVALO,H8) == esperadoH8);

	tipoTabuleiro esperadoD4 = 0;
	esperadoD4 = tb.setBit(esperadoD4,C6);
	esperadoD4 = tb.setBit(esperadoD4,E6);
	esperadoD4 = tb.setBit(esperadoD4,C2);
	esperadoD4 = tb.setBit(esperadoD4,E2);
	esperadoD4 = tb.setBit(esperadoD4,F5);
	esperadoD4 = tb.setBit(esperadoD4,F3);
	esperadoD4 = tb.setBit(esperadoD4,B5);
	esperadoD4 = tb.setBit(esperadoD4,B3);
	assert(tb.getMaskAttack(CAVALO,D4) == esperadoD4);

	assert(tb.popCount(esperadoD4) == 8);
}
